package waimai;

import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;

import java.util.List;

@Slf4j
@Data
public class NluResp {
    /**
     * 主意图
     */
    @JSONField(
            name = "main"
    )
    private String mainIntent;

    /**
     * 子意图
     */
    @JSONField(
            name = "sub"
    )
    private String subIntent;

    /**
     * 槽位
     */
    @JSONField(
            name = "slot"
    )
    private Slot slot;

    @Data
    public static class Slot {
        /**
         * 地址
         * |-- address	dict	地址
         *  |--- confirm	bool	确认地址标识位(确认：True;  否定： False)
         *  |--- name	string	配送地址
         *  |--- poi_type	int	0: 家，1: 公司，2: 地址名
         *  |--- index	int	地址的index
         */
        @JSONField(
                name = "address"
        )
        private Address address;

        /**
         * 搜索类型(历史订单搜索、正常搜索)
         */
        @JSONField(
                name = "search_type"
        )
        private String searchType;

        /**
         * 交易时间
         */
        @JSONField(
                name = "trade_time"
        )
        private String tradeTime;

        /**
         * 配送时间
         */
        @JSONField(
                name = "delivery_time"
        )
        private Long deliveryTime;

        /**
         * 店铺名称
         */
        @JSONField(
                name = "shop_name"
        )
        private String shopName;

        /**
         * 商品确认标识位(确认： True;  取消： False)
         */
        @JSONField(
                name = "confirm_goods"
        )
        private boolean confirmGoods;

        /**
         * 确认下单标识位(确认： True;  取消： False)
         */
        @JSONField(
                name = "confirm_order"
        )
        private boolean confirmOrder;

        /**
         * 商品详细信息(商品名称、商品规格、商品属性、商品数量、标识位等)
         */
        @JSONField(
                name = "goods"
        )
        private List<Good> goods;

        /**
         * 复购信息
         */
        @JSONField(
                name = "rebuy_info"
        )
        private RebuyInfo rebuyInfo;

    }

    @Data
    public static class Good {

        /**
         * 删除/新增/更改规格
         */
        @JSONField(
                name = "action"
        )
        private String action;

        /**
         * 商品名称
         */
        @JSONField(
                name = "name"
        )
        private String name;

        /**
         * 购物车中对应商品列表的index（若购物车中没有对应的商品，则index=-1。）
         */
        private Integer index;

        @JSONField(
                name = "item_id"
        )
        private String itemId;

        /**
         * 商品数量
         */
        private Integer number;

        /**
         * 商品属性
         * |--- attributes	dict	商品属性(温度、杯量、甜度)
         *  |---- specifications	dict	商品规格，例如{"杯量": "大杯"， "甜度": "七分甜" ...}
         *  |---- scene	str	餐饮场景（夜宵、早餐、午饭...）
         *  |---- taste	str	口味
         *  |---- food_category	str	美食分类(包含菜系+美食： 川菜、鲁菜、火锅...)
         */
        private Attributes attributes;

    }

    @Data
    public static class RebuyInfo{
        @JSONField(
                name = "order_start_time"
        )
        private Long orderStartTime;

        @JSONField(
                name = "order_end_time"
        )
        private Long orderEndTime;

        private List<String> keywords;
    }

    @Data
    public static class Address {
        private boolean confirm;
        private String name;
        @JSONField(
                name = "poi_type"
        )
        private Integer poiType;
        private Integer index;
        @JSONField(
                name = "address_id"
        )
        private String addressId;
    }

    @Data
    public static class Attributes{
        /**
         * 已知要改哪个规格的值
         */
        private JSONObject specifications;
        /**
         * 未知规格信息
         */
        private List<String> keywords;
        private String scene;
        private String taste;
        @JSONField(
                name = "food_category"
        )
        private String foodCategory;
    }
}
